//1.引入axios
import axios from "axios";
//进度条
import nProgress from "nprogress";
import "nprogress/nprogress.css";

// // 引入uuid封装好的工具
// import { getUserTempId } from "@/utils/getUserTempId";
// import store from "@/store";
//携带登陆后的token

//将来我们要发送很多请求,有不同的模块 有不同的数据
//2.创建实例对对象 然后统一配置之后再去发送数据
//只要使用ajax这个实例对象发送请求,会走到这里面的配置项
const request = axios.create({
  baseURL: "/wy", // 请求的基本路径
  timeout: 20000, // 设置超时时间
  //设置请求头

  // headers: { userTempId: getUserTempId() },
});

//3.请求拦截器 在请求发送之前执行里面的代码
request.interceptors.request.use((config) => {
  //一定要返回配置项 这个config包含了请求的一些配置信息
  nProgress.set(0.4); //请求的进度上来就是百分之40
  nProgress.start();

  // 为每次请求添加一个请求头 在ajax里面设置也是一样的
  // config.headers.userTempId = getUserTempId();

  // const token = store.state.user.token;
  // if (token) {
  //   config.headers.token = token;
  // }

  return config;
});
//4.响应拦截器
request.interceptors.response.use(
  (response) => {
    //设置进度条的结束
    nProgress.done();
    //返回的是data中的数据
    return response.data;
  },
  (err) => {
    nProgress.done();
    // 统一处理错误
    alert("发送ajax请求失败" + err.message);
    // return Promise.reject(new Error(err.message))

    // 这里其实是影响axios调用后返回的promise的状态及结果
    // 返回失败的promise,那么这个错误信息就会继续往后传，传到我们调用axios之后promise对象的.then
    // 后续我们可以继续去处理这个错误
    return Promise.reject(err);

    // 中断promise链
    // 返回pending状态的promise就可以中断promise链，后面就不需要处理了
    // return new Promise(() => {})
  }
);

// 5.导出对象
export default request;
